/*
 *    Copyright (c) 2018-2025, lengleng All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the pig4cloud.com developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * Author: lengleng (wangiegie@gmail.com)
 */

package com.pig4cloud.pigx.user.mapstruct;


import com.pig4cloud.pigx.user.constant.PublicChainTypeEnums;
import com.pig4cloud.pigx.user.dto.UserMobileDTO;
import com.pig4cloud.pigx.user.entity.User;
import com.pig4cloud.pigx.user.vo.UserMobileVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * DAPP平台客户
 *
 * @author pigx code generator
 * @date 2022-08-12 18:17:56
 */
@Mapper
public interface UserMobileStruct {

	UserMobileStruct INSTANCE = Mappers.getMapper(UserMobileStruct.class);

	/**
	 *  User转UserMobileVO
	 * @param user
	 * @return
	 */
	@Mapping(target = "chain", expression =
			"java(com.pig4cloud.pigx.user.mapstruct.UserMobileStruct.chain2Label(user.getChain()))")
	UserMobileVO user2Vo(User user);

	List<UserMobileVO> userList2VoList(List<User> userList);

	@Mapping(target = "chain", expression =
			"java(com.pig4cloud.pigx.user.mapstruct.UserMobileStruct.chain2Code(userMobileDTO.getChain()))")
	User dto2user(UserMobileDTO userMobileDTO);


	/**
	 * 公链字典数值转标签名
	 * @param chain
	 * @return
	 */
	@Named("chain")
	static String chain2Label(String chain) {

		if (chain == null || chain.isEmpty()) {
			return null;
		}
		if (chain.equals(PublicChainTypeEnums.ETH.getCode())){
			return PublicChainTypeEnums.ETH.getLabel();
		} else if (chain.equals(PublicChainTypeEnums.TRX.getCode()) ){
			return PublicChainTypeEnums.TRX.getLabel();
		}
		return null;
	}

	/**
	 * 公链标签名转字典数值
	 * @param chain
	 * @return
	 */
	@Named("chain")
	static String chain2Code(String chain) {

		if (chain == null || chain.isEmpty()) {
			return null;
		}
		if (chain.equals(PublicChainTypeEnums.ETH.getLabel())){
			return PublicChainTypeEnums.ETH.getCode();
		} else if (chain.equals(PublicChainTypeEnums.TRX.getLabel()) ){
			return PublicChainTypeEnums.TRX.getCode();
		}
		return null;
	}

}
